﻿Imports System.Data
Imports System.Data.SqlClient

Public Class VeiculosDAL

    Sub New()

    End Sub

    Function inserir(ByVal MOD_CODIGO As Integer, ByVal VEI_PLACA As String,
                     ByVal VEI_CHASSI As String, ByVal VEI_COR As String, ByVal VEI_CATEGORIA As String,
                     ByVal VEI_CAPACIDADE As Integer, ByVal VEI_ANO_FABRICACAO As Integer,
                     ByVal VEI_ANO_MODELO As Integer, ByVal VEI_ATIVO_SN As Char, ByVal VEI_DATA_CADASTRO As Date) As Integer

        Dim cmd As New SqlCommand
        Dim objD As New Dados
        Dim codigo As Integer
        Try
            cmd.CommandText = "INSERT INTO VEICULOS (MOD_CODIGO, VEI_PLACA, " & _
                              "VEI_CHASSI, VEI_COR, VEI_CATEGORIA, VEI_CAPACIDADE, VEI_ANO_FABRICACAO, " & _
                              "VEI_ANO_MODELO, VEI_ATIVO_SN, VEI_DATA_CADASTRO) " & _
                              "VALUES (@MOD_CODIGO, @VEI_PLACA, " & _
                              "@VEI_CHASSI, @VEI_COR, @VEI_CATEGORIA, @VEI_CAPACIDADE, @VEI_ANO_FABRICACAO, " & _
                              "@VEI_ANO_MODELO, @VEI_ATIVO_SN, @VEI_DATA_CADASTRO)"

            cmd.Parameters.Add(New SqlParameter("@MOD_CODIGO", SqlDbType.Int)).Value = MOD_CODIGO
            cmd.Parameters.Add(New SqlParameter("@VEI_PLACA", SqlDbType.Char, 8)).Value = VEI_PLACA
            cmd.Parameters.Add(New SqlParameter("@VEI_CHASSI", SqlDbType.VarChar, 50)).Value = VEI_CHASSI
            cmd.Parameters.Add(New SqlParameter("@VEI_COR", SqlDbType.VarChar, 25)).Value = VEI_COR
            cmd.Parameters.Add(New SqlParameter("@VEI_CATEGORIA", SqlDbType.VarChar, 30)).Value = VEI_CATEGORIA
            cmd.Parameters.Add(New SqlParameter("@VEI_CAPACIDADE", SqlDbType.Int)).Value = VEI_CAPACIDADE
            cmd.Parameters.Add(New SqlParameter("@VEI_ANO_FABRICACAO", SqlDbType.Int)).Value = VEI_ANO_FABRICACAO
            cmd.Parameters.Add(New SqlParameter("@VEI_ANO_MODELO", SqlDbType.Int)).Value = VEI_ANO_MODELO
            cmd.Parameters.Add(New SqlParameter("@VEI_ATIVO_SN", SqlDbType.Char, 1)).Value = VEI_ATIVO_SN
            cmd.Parameters.Add(New SqlParameter("@VEI_DATA_CADASTRO", SqlDbType.Date)).Value = VEI_DATA_CADASTRO

            codigo = objD.executacomandoAI(cmd, "VEICULOS")
        Catch ex As Exception
            Throw ex
        End Try
        cmd = Nothing
        objD = Nothing
        Return codigo
    End Function

    Sub alterar(ByVal VEI_CODIGO As Integer, ByVal MOD_CODIGO As Integer, ByVal VEI_PLACA As String,
                     ByVal VEI_CHASSI As String, ByVal VEI_COR As String, ByVal VEI_CATEGORIA As String,
                     ByVal VEI_CAPACIDADE As Integer, ByVal VEI_ANO_FABRICACAO As Integer,
                     ByVal VEI_ANO_MODELO As Integer, ByVal VEI_ATIVO_SN As Char, ByVal VEI_DATA_CADASTRO As Date)
        Dim cmd As New SqlCommand
        Dim objD As New Dados

        Try
            cmd.CommandText = "UPDATE VEICULOS SET MOD_CODIGO=@MOD_CODIGO, VEI_PLACA=@VEI_PLACA, " +
                              "VEI_CHASSI=@VEI_CHASSI, VEI_COR=@VEI_COR, VEI_CATEGORIA=@VEI_CATEGORIA, VEI_CAPACIDADE=@VEI_CAPACIDADE, " +
                              "VEI_ANO_FABRICACAO=@VEI_ANO_FABRICACAO, VEI_ANO_MODELO=@VEI_ANO_MODELO, VEI_ATIVO_SN=@VEI_ATIVO_SN, " +
                              "VEI_DATA_CADASTRO=@VEI_DATA_CADASTRO WHERE VEI_CODIGO=@VEI_CODIGO"

            cmd.Parameters.Add(New SqlParameter("@VEI_CODIGO", SqlDbType.Int)).Value = VEI_CODIGO
            cmd.Parameters.Add(New SqlParameter("@MOD_CODIGO", SqlDbType.Int)).Value = MOD_CODIGO
            cmd.Parameters.Add(New SqlParameter("@VEI_PLACA", SqlDbType.Char, 8)).Value = VEI_PLACA
            cmd.Parameters.Add(New SqlParameter("@VEI_CHASSI", SqlDbType.VarChar, 50)).Value = VEI_CHASSI
            cmd.Parameters.Add(New SqlParameter("@VEI_COR", SqlDbType.VarChar, 25)).Value = VEI_COR
            cmd.Parameters.Add(New SqlParameter("@VEI_CATEGORIA", SqlDbType.VarChar, 30)).Value = VEI_CATEGORIA
            cmd.Parameters.Add(New SqlParameter("@VEI_CAPACIDADE", SqlDbType.Int)).Value = VEI_CAPACIDADE
            cmd.Parameters.Add(New SqlParameter("@VEI_ANO_FABRICACAO", SqlDbType.Int)).Value = VEI_ANO_FABRICACAO
            cmd.Parameters.Add(New SqlParameter("@VEI_ANO_MODELO", SqlDbType.Int)).Value = VEI_ANO_MODELO
            cmd.Parameters.Add(New SqlParameter("@VEI_ATIVO_SN", SqlDbType.Char, 1)).Value = VEI_ATIVO_SN
            cmd.Parameters.Add(New SqlParameter("@VEI_DATA_CADASTRO", SqlDbType.Date)).Value = VEI_DATA_CADASTRO

            objD.executacomando(cmd)
        Catch ex As Exception
            Throw ex
        End Try
        cmd = Nothing
        objD = Nothing
    End Sub

    Sub excluir(ByVal VEI_CODIGO As Integer)
        Dim cmd As New SqlCommand
        Dim objD As New Dados
        Try
            cmd.CommandText = "UPDATE VEICULOS SET VEI_ATIVO_SN='N' WHERE VEI_CODIGO=@VEI_CODIGO"
            cmd.Parameters.Add(New SqlParameter("@VEI_CODIGO", SqlDbType.Int)).Value = VEI_CODIGO
            objD.executacomando(cmd)
        Catch ex As Exception
            Throw ex
        End Try
        cmd = Nothing
        objD = Nothing
    End Sub

    Function localizar(ByVal VEI_CODIGO As Integer) As DataTable
        Dim cmd As New SqlCommand
        Dim objD As New Dados
        Dim tab As DataTable = Nothing
        Try

            cmd.CommandText = "SELECT * FROM VEICULOS WHERE VEI_CODIGO = @VEI_CODIGO and vei_ativo_sn<>'N'"
            cmd.Parameters.Add(New SqlParameter("@VEI_CODIGO", SqlDbType.Int)).Value = VEI_CODIGO

            tab = objD.executaConsulta(cmd)

        Catch ex As Exception
            Throw ex
        End Try
        cmd = Nothing
        objD = Nothing
        Return tab
        tab = Nothing
    End Function

    Function localizar(ByVal campo As String, ByVal condicao As String) As DataTable
        Dim cmd As New SqlCommand
        Dim objD As New Dados
        Dim tab As DataTable = Nothing
        Try

            If (condicao <> "") Then
                cmd.CommandText = "SELECT * FROM VEICULOS WHERE " + campo + " =@CONDICAO and vei_ativo_sn<>'N'"
            Else
                cmd.CommandText = "SELECT * FROM VEICULOS WHERE VEI_CODIGO = @VEI_CODIGO and vei_ativo_sn<>'N'"
            End If

            cmd.Parameters.Add(New SqlParameter("@CONDICAO", SqlDbType.VarChar)).Value = condicao

            tab = objD.executaConsulta(cmd)

        Catch ex As Exception
            Throw ex
        End Try
        cmd = Nothing
        objD = Nothing
        Return tab
        tab = Nothing
    End Function

    Function localizar(ByVal descricao As String) As DataTable

        Dim cmd As New SqlCommand
        Dim objD As New Dados
        Dim tab As DataTable = Nothing
        Try
            If (descricao = "ultimo") Then
                cmd.CommandText = "SELECT vei_codigo = max(vei_codigo) FROM veiculos where vei_ativo_sn<>'N'"
            ElseIf (descricao = "primeiro") Then
                cmd.CommandText = "SELECT vei_codigo = min(vei_codigo) FROM veiculos where vei_ativo_sn<>'N'"

            Else
                'Comando para localizar vários registros no banco
                cmd.CommandText = "SELECT v.vei_codigo, mo.mod_nome, c.com_tipo, v.vei_placa, v.vei_cor, v.vei_categoria, v.vei_chassi, v.vei_capacidade, v.vei_ano_fabricacao, v.vei_ano_modelo, v.vei_ativo_sn, v.vei_data_cadastro  FROM veiculos v, modelos mo, combustivel c, combustiveisveiculo cv WHERE vei_ativo_sn<>'N' and mo.mod_codigo = v.mod_codigo and cv.com_codigo = c.com_codigo and vei_codigo like @descricao"

                'Parâmetro de entrada
                cmd.Parameters.Add(New SqlParameter("@descricao", SqlDbType.VarChar)).Value = descricao + "%"
            End If
            'Execução do comando
            tab = objD.executaConsulta(cmd)

        Catch ex As Exception
            Throw ex
        End Try
        cmd = Nothing
        objD = Nothing
        Return tab
        tab = Nothing
    End Function


    Function localizarProxAnterior(ByVal DESCRICAO As String, ByVal VEI_CODIGO As Integer) As DataTable
        Dim cmd As New SqlCommand
        Dim objD As New Dados
        Dim tab As DataTable = Nothing
        Try
            If (DESCRICAO = "proximo") Then
                cmd.CommandText = "SELECT * FROM VEICULOS WHERE VEI_CODIGO = (SELECT MIN(VEI_CODIGO) FROM VEICULOS WHERE VEI_CODIGO > @VEI_CODIGO) and vei_ativo_sn<>'N'"
            ElseIf (DESCRICAO = "anterior") Then
                cmd.CommandText = "SELECT * FROM VEICULOS WHERE VEI_CODIGO = (SELECT MAX(VEI_CODIGO) FROM VEICULOS WHERE VEI_CODIGO < @VEI_CODIGO) and vei_ativo_sn<>'N'"
            End If
            'Parâmetro de entrada
            cmd.Parameters.Add(New SqlParameter("@VEI_CODIGO", SqlDbType.Int)).Value = VEI_CODIGO
            'Execução do comando
            tab = objD.executaConsulta(cmd)

        Catch ex As Exception
            Throw ex
        End Try
        cmd = Nothing
        objD = Nothing
        Return tab
        tab = Nothing
    End Function

    Public Function localizaCombustivel(ByVal codigo As Integer)
        Dim cmd As New SqlCommand
        Dim objD As New Dados
        Dim tab As DataTable = Nothing
        Try
            cmd.CommandText = "SELECT COM FROM COMBUSTIVEL WHERE COM_CODIGO=@CODIGO and vei_ativo_sn<>'N'"
            cmd.Parameters.Add(New SqlParameter("@CODIGO", SqlDbType.Int)).Value = codigo
            tab = objD.executaConsulta(cmd)
        Catch ex As Exception
            Throw ex
        End Try
        cmd = Nothing
        objD = Nothing
        Return tab
        tab = Nothing
    End Function

    Public Function localizaModelo(ByVal codigoModelo As Integer)
        Dim cmd As New SqlCommand
        Dim objD As New Dados
        Dim tab As DataTable = Nothing
        Try
            cmd.CommandText = "SELECT mod_codigo FROM veiculos WHERE mod_CODIGO=@CODIGO"
            cmd.Parameters.Add(New SqlParameter("@CODIGO", SqlDbType.Int)).Value = codigoModelo
            tab = objD.executaConsulta(cmd)
        Catch ex As Exception
            Throw ex
        End Try
        cmd = Nothing
        objD = Nothing
        Return tab
        tab = Nothing
    End Function

    Function veiculosdisponiveis(ByVal data As Date) As DataTable
        Dim cmd As New SqlCommand
        Dim objD As New Dados
        Dim tab As New DataTable
        Try
            cmd.CommandText = "select v.vei_codigo, v.mod_codigo, v.vei_placa, v.vei_cor, v.vei_categoria, v.vei_chassi, v.vei_capacidade, v.vei_ano_fabricacao, v.vei_ano_modelo, v.vei_ativo_sn, v.vei_data_cadastro " +
                              "from veiculos v where  " +
                              "v.vei_codigo not in " +
                              "(select vei_codigo from lotacao where lot_data = @data and lot_status <> 'Finalizado') and " +
                              "v.vei_codigo not in " +
                              "(select vei_codigo from ordem_servico where os_real_problema is null) and " +
                              "v.vei_codigo not in " +
                              "(select l.vei_codigo from entregas e inner join lotacao l ON l.lot_codigo = e.lot_codigo " +
                              "where e.ent_data_entrega is NULL) and (vei_ativo_sn='S' or vei_ativo_sn='L') order by v.vei_codigo"
            cmd.Parameters.Add(New SqlParameter("@data", SqlDbType.Date)).Value = data
            tab = objD.executaConsulta(cmd)
        Catch ex As Exception

        End Try
        Return tab
    End Function

    'Function veiculosdisponiveis(ByVal data As Date) As DataTable
    '    Dim cmd As New SqlCommand
    '    Dim objD As New Dados
    '    Dim tab As New DataTable
    '    Try
    '        cmd.CommandText = "select v.vei_codigo, v.mod_codigo, v.com_codigo, v.vei_placa, v.vei_cor, v.vei_categoria, v.vei_chassi, v.vei_capacidade, v.vei_ano_fabricacao, v.vei_ano_modelo, v.vei_ativo_sn, v.vei_data_cadastro " +
    '                          "from veiculos v where  " +
    '                          "v.vei_codigo not in " +
    '                          "(select vei_codigo from lotacao where lot_data = @data and lot_status <> 'Finalizado') and " +
    '                          "v.vei_codigo not in " +
    '                          "(select vei_codigo from ordem_servico where os_real_problema is null) and " +
    '                          "v.vei_codigo not in " +
    '                          "(select l.vei_codigo from entregas e inner join lotacao l ON l.lot_codigo = e.lot_codigo " +
    '                          "where e.ent_data_entrega is NULL) and vei_ativo_sn='S' or vei_ativo_sn='L' order by v.vei_codigo"
    '        cmd.Parameters.Add(New SqlParameter("@data", SqlDbType.Date)).Value = data
    '        tab = objD.executaConsulta(cmd)
    '    Catch ex As Exception

    '    End Try
    '    Return tab
    'End Function

    Function veiculosdisponiveis(ByVal placa As String) As DataTable
        Dim cmd As New SqlCommand
        Dim objD As New Dados
        Dim tab As New DataTable
        Dim sql As String
        Try
            If (placa <> "") Then
                sql = "select v.vei_codigo, v.mod_codigo, v.vei_placa, v.vei_cor, v.vei_categoria, v.vei_chassi, v.vei_capacidade, v.vei_ano_fabricacao, v.vei_ano_modelo, v.vei_ativo_sn, v.vei_data_cadastro " +
                      "from veiculos v where v.vei_placa=@placa and "
            Else
                sql = "select v.vei_codigo, v.mod_codigo, v.vei_placa, v.vei_cor, v.vei_categoria, v.vei_chassi, v.vei_capacidade, v.vei_ano_fabricacao, v.vei_ano_modelo, v.vei_ativo_sn, v.vei_data_cadastro " +
                              "from veiculos v where "
            End If
            sql += "v.vei_codigo not in " +
                   "(select vei_codigo from lotacao where lot_status <> 'Finalizado') and " +
                   "v.vei_codigo not in " +
                   "(select vei_codigo from ordem_servico where os_real_problema is null) and " +
                   "v.vei_codigo not in " +
                   "(select l.vei_codigo from entregas e inner join lotacao l ON l.lot_codigo = e.lot_codigo " +
                   "where e.ent_data_entrega is NULL) and (vei_ativo_sn='S' or vei_ativo_sn='L') order by v.vei_codigo"

            cmd.CommandText = sql
            cmd.Parameters.Add(New SqlParameter("@placa", SqlDbType.VarChar)).Value = placa
            tab = objD.executaConsulta(cmd)
        Catch ex As Exception

        End Try
        Return tab
    End Function
End Class
